package com.itheima.d4_collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * 目标：掌握Collections集合工具类的使用。
 */
public class CollectionsTest1 {
    public static void main(String[] args) {
        // 1、public static <T> boolean addAll(Collection<? super T> c, T...elements)：为集合批量添加数据
        ArrayList<String> names = new ArrayList<>();
        names.add("张无忌");
        names.add("张三丰");
        ArrayList<String> otherNames = new ArrayList<>();
        otherNames.add("赵敏");
        otherNames.add("小昭");
        otherNames.add("周芷若");
        //集合自带的addAll方法
        names.addAll(otherNames); //把otherNames中所有的元素一次性添加到names集合中
        System.out.println("names = " + names);

        //集合工具类中的addAll方法
        Collections.addAll(names, "殷素素", "黄蓉", "灭绝师太");
        System.out.println("names = " + names);


        // 2、public static void shuffle(List<?> list)：打乱List集合中的元素顺序。
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        System.out.println("list = " + list);
        //打乱集合中的顺序
        Collections.shuffle(list);
        System.out.println("list = " + list);


        // 3、 public static <T> void sort(List<T> list)：对List集合中的元素进行升序排序。
        //对元素具有排序能力（类型实现了Comparable接口）的List集合直接排序
        Collections.sort(list);
        System.out.println("list = " + list);


        // 4、public static <T> void sort(List<T> list， Comparator<? super T> c): 对List集合中元素，按照比较器对象指定的规则进行排序
        //如果元素原来的排序规则不是我们想要的，或者元素本身不具备排序能力，可以额外给一个比较器进行定义排序规则
        //字符串降序排序
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1); //降序
            }
        });
        System.out.println("list = " + list);


        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("殷素素", 39));
        students.add(new Student("张翠山", 40));
        students.add(new Student("张无忌", 18));
        System.out.println("students = " + students);

        Collections.sort(students); //直接排序，要求集合元素的类型必须实现Comparable接口
        System.out.println("students = " + students);

        //想要让学生数据按照年龄的降序排序
        Collections.sort(students, (s1, s2) -> Integer.compare(s2.age, s1.age));
        System.out.println("students = " + students);
    }
}

class Student implements Comparable<Student>{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        return Integer.compare(this.age, o.age);
    }
}